const request = (url, method, data) => {
    const options = {
        headers: {
            "content-type": "application/json",
        },
        method: method,
    };

    // 如果本地存储有 token，设置请求头的 Authorization  
    if (localStorage.getItem('token')) {
        options.headers.Authorization = "Bearer " + localStorage.getItem('token');
    }

    // 处理 GET 和 DELETE 请求  
    if (method === "get") {
        // 对于 GET 请求，将数据格式化为查询字符串  
        let str = "";
        Object.keys(data).forEach((key) => {
            str += `&${key}=${encodeURIComponent(data[key])}`;
        });
        str = str.slice(1); // 去掉开头的 '&'  
        url += "?" + str; // 添加到 URL  
    } else if (method === "delete") {
        // 对于 DELETE 请求，将 data.id 添加到 URL 的路径中  
        if (data.id) {
            url += `/${data.id}`; // 如果有 id，添加到 URL  
        } else if (data.uuid) {
            url += `/${data.uuid}`; // 如果有 uuid，添加到 URL  
        }
    } else {
        // 对于其他请求（POST、PUT等），将数据转换为 JSON 字符串  
        options.body = JSON.stringify(prepareData(data));
    }

    return fetch("http://82.157.206.194:8041" + url, options).then((res) => {
        if (!res.ok) {
            throw new Error(`HTTP error! status: ${res.status}`); // 处理错误情况  
        }
        return res.json();
    });
};
// 处理数据的通用函数  
const prepareData = (data) => {
    const processedData = { ...data };

    // 确保所有 ID 字段为 number 类型  
    Object.keys(processedData).forEach(key => {
        if (key.toLowerCase().includes('id') && typeof processedData[key] !== 'number') {
            const numberValue = Number(processedData[key]);
            if (!isNaN(numberValue)) { // 如果能转换为有效的数字  
                processedData[key] = numberValue; // 转换为 number 类型  
            }
        }
    });

    return processedData;
};

export default request;